// 测试数据生成页面
const app = getApp()
const api = require('../../utils/api')
const util = require('../../utils/util.js')

Page({
  data: {
    generating: false,
    count: 30,
    progress: 0,
    logs: []
  },

  onLoad() {
    // 页面加载完成
  },

  // 生成随机血压值的函数
  generateRandomBloodPressure() {
    // 正常血压范围内的随机值
    const normalSystolic = Math.floor(Math.random() * 30) + 110; // 110-140之间
    const normalDiastolic = Math.floor(Math.random() * 20) + 70; // 70-90之间
    
    // 有20%的概率生成偏高或偏低的血压值以增加数据多样性
    const anomalyFactor = Math.random();
    let systolic, diastolic;
    
    if (anomalyFactor < 0.1) {
      // 偏低
      systolic = Math.floor(Math.random() * 20) + 90; // 90-110之间
      diastolic = Math.floor(Math.random() * 10) + 60; // 60-70之间
    } else if (anomalyFactor > 0.9) {
      // 偏高
      systolic = Math.floor(Math.random() * 30) + 140; // 140-170之间
      diastolic = Math.floor(Math.random() * 20) + 90; // 90-110之间
    } else {
      // 正常范围
      systolic = normalSystolic;
      diastolic = normalDiastolic;
    }
    
    return { systolic, diastolic };
  },

  // 生成过去30天的随机时间点
  generateRandomTimestamps(count) {
    const timestamps = [];
    const now = new Date();
    
    for (let i = 0; i < count; i++) {
      // 在过去30天内随机选择一个日期
      const daysAgo = Math.floor(Math.random() * 30);
      const date = new Date(now);
      date.setDate(now.getDate() - daysAgo);
      
      // 设置随机时间
      date.setHours(Math.floor(Math.random() * 24));
      date.setMinutes(Math.floor(Math.random() * 60));
      date.setSeconds(0);
      date.setMilliseconds(0);
      
      timestamps.push(date.toISOString());
    }
    
    // 按时间排序
    return timestamps.sort();
  },

  // 生成血压测试数据的方法
  async generateTestData() {
    if (this.data.generating) {
      return;
    }

    this.setData({
      generating: true,
      progress: 0,
      logs: ['开始生成测试数据...']
    });

    const count = this.data.count;
    const timestamps = this.generateRandomTimestamps(count);
    
    for (let i = 0; i < count; i++) {
      const { systolic, diastolic } = this.generateRandomBloodPressure();
      const measuredAt = timestamps[i];
      
      const log = `添加记录 #${i+1}: ${systolic}/${diastolic} mmHg，时间: ${new Date(measuredAt).toLocaleString()}`;
      this.appendLog(log);
      
      try {
        // 创建记录数据对象
        const recordData = {
          systolic,
          diastolic,
          measuredAt,
          note: '测试数据'
        };
        
        // 正确调用API - 第一个参数是类型，第二个参数是数据对象
        await api.health.addRecord('bloodPressure', recordData);
        
        this.setData({
          progress: Math.floor(((i + 1) / count) * 100)
        });
        
        // 添加一个小延迟，避免请求过快
        await new Promise(resolve => setTimeout(resolve, 300));
        
      } catch (error) {
        const errorLog = `添加记录 #${i+1} 失败: ${error.message || error}`;
        this.appendLog(errorLog);
        console.error(errorLog, error);
      }
    }
    
    this.appendLog('测试数据添加完成！');
    this.setData({ generating: false });
    
    // 完成后刷新当前页面，以便立即看到折线图变化
    wx.showToast({
      title: '数据已添加',
      icon: 'success',
      duration: 2000,
      complete: () => {
        setTimeout(() => {
          // 返回上一页，以便重新加载数据
          wx.navigateBack();
        }, 2000);
      }
    });
  },
  
  // 添加日志
  appendLog(log) {
    this.setData({
      logs: [...this.data.logs, log]
    });
  },
  
  // 取消生成
  cancelGeneration() {
    this.setData({ generating: false });
    this.appendLog('已取消生成');
  },
  
  // 修改生成数量
  changeCount(e) {
    this.setData({
      count: parseInt(e.detail.value, 10) || 30
    });
  }
}); 